iT邦幫忙

2023 iThome 鐵人賽

DAY 14
1
AI & Data

Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇系列 第 14

[Day14] 吃了容器果實的鯨魚拉布-Docker(1)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230929/20135427JVGu5srrlS.png

前言

之前很多鐵人賽都有談過 docker ,想要很完整系統性的學 docker,都可以參考下方連結:
1. 30 天與鯨魚先生做好朋友
2. 那些關於 docker 你知道與不知道的事

想學更多的話,可以買書來看,這兩位作者的鐵人賽都有得獎且出版書籍了/images/emoticon/emoticon12.gif
1. Docker 實戰 6堂課:56個實驗動手做,掌握 Linux 容器核心技術
2. 30天與 Docker 做好朋友:跟鯨魚先生一同探索開發者的大平台

覺得 30 天內容太多的話,這邊會花2-3天講基本概念和簡單實作環境,至少之後在使用 airflow 的 docker 時不會太陌生~

Docker 簡介

Docker 於 2013 年推出,最初只是 dotCloud 公司的小型專案,後來加入了 Linux 基金會,快速崛起成為容器化技術的領先者。Docker 的主要優勢在於能夠將應用程式、程式庫、運行環境和配置打包成輕量、可攜、易於部署的容器,目前 Docker 已經是軟體開發和運營中的重要工具了。

Docker 的 Logo 就是一隻鯨魚背著許多貨櫃,貨櫃就是代表不同的環境容器

Docker 解決了什麼

「我寫的程式在我的電腦上很正常運作,怎麼搬到你電腦上就問題一堆」

以前為了讓程式在各種不同的作業環境中運行,必須解決許多環境相容性的問題,自從有 Docker 之後,我們可以將應用程式環境容器化,從而大幅簡化了以往的環境相容性挑戰。只要能安裝 Docker Engine,接著將應用程式打包成「標準化單元」,就能確保應用程式在任何環境中順利運行。

Docker 和 VirtualBox 都是虛擬化,哪裡不一樣

可以看到下方表格和圖片,VirtualBox(右圖) 是從系統層級虛擬「作業系統及應用程式」,Docker(左圖) 是從作業系統層級虛擬「應用程式」,兩者相比,VirtualBox 更底層,耗費資源和時間也會更久,對於性能上也會消耗更多,但是如果很需要完整的作業系統使用,還是用虛擬機器像 VirtualBox 會比較適合,像是在 Windows 裡面要用 Mac 系統、或是 Mac 裡面要用 Linux 系統這類型的需求,但是如果只是安裝程式專案的環境,用容器 Docker 就可以了,用虛擬機反而浪費資源。

Docker VirtualBox
虛擬化名稱 容器(Container) 虛擬機器(Virtual Machine)
虛擬化層級 作業系統層級 系統層級
開啟花費時間 短(x秒) 長(x分鐘)

https://ithelp.ithome.com.tw/upload/images/20230929/20135427qARayp3tew.png
ref: docker 官方文章

Docker 三大元素

Image 映像檔

映像檔也可稱作鏡像、模板,映像檔是只能讀取的檔案,可以快速並重複生產無數個容器(Container),通常會拿一個基本的 Base Image,再依照不同開發需求從 Base Image 去加工修改成不同的 Image,Base Image 可以從 DockerHub 下載取得。

Container 容器

容器是映像檔建立出來的執行實例,可以啟動、停止、刪除,每個容器之間都是相互獨立的環境。

Registry 倉庫

熟悉 Git 的人可以理解成是 Repository,Repository是儲存程式碼的倉庫,Docker 的 Registry 是放置和儲存 Image 映像檔的倉庫,最常見的公有倉庫是 DockerHub。

什麼!Docker 也有 Repository?這樣要怎麼分,Docker 的 Repository 通常是放相關 Image 的不同版本,所以 Registry 也可以叫做倉庫(Repository)的倉庫
Ref:Difference between Docker registry and repository

舉例

  1. 映像檔就像是餅乾模具,容器是模具烤出來的餅乾,而倉庫是用來放置模具們的櫃子
  2. 映像檔就像是食譜,容器就像是做出來的食材,而倉庫是收集多個食譜的書籍
  3. 映像檔就像是程式語言的類別(Class),容器就是用類別做出的實例物件(Object),倉庫就是擁有多個類別的模組

誒~盡可能找了不同的舉例,希望對於這三個元素模糊的人可以清楚一些~ /images/emoticon/emoticon13.gif

結語

今天就先到這邊囉!明天會繼續講 docker 和用 Dockerfile 實作建立環境,後天就會介紹 Docker-compose 和用 Docker 建立 Airflow 的環境


上一篇
[Day13] 零地點突破‧改-Airflow Taskflow API(下)
下一篇
[Day15] 吃了容器果實的鯨魚拉布-Docker(2)
系列文
Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言